package com.biz.primus.ms.oms.service.returns;

import com.biz.primus.model.oms.vo.returns.*;

/**
 *
 * 退货状态:
 *  begin -> audited  returning -> finished
 *             |         |
 *    reject <---> pass ->
 *      |
 *    finished
 *
 *
 *
 * 退单操作,包括审核
 * @author yanweijin
 * @date 2017/10/18
 */
public interface OrderReturnStateService {

    /**
     * 退货单审核, 如果通过,则将状态推进到audited,否则将状态推进为finished
     * @param req
     */
    void auditReturns(AuditRequestVo req);


    /**
     * 修改退货单数据,只能在finished前修改
     *
     * @param req
     */
    void modifyReturns(ModifyReturnRequestVo req);

    /**
     * 修改退款信息，只能修改未完成退款的退款单
     * @param refundRequestVo
     */
    void modifyRefunds(RefundRequestVo refundRequestVo);

    /**
     * 用户填写退货物流信息,将退货状态从audited/pass状态推进到returning
     * @param req
     */
    void fillReturnExpressInfo(UserFillReturnExpressInfoRequestVo req);

    /**
     * 退货确认入库, 将订单退货单状态从audited/pass或returning推进到finished,并触发库存变动
     * @param req
     */
    void returnInbound(OmsReturnOperationRequest req);

    /**
     * 用户取消退货申请,添加取消标记 cancel,只能在状态为begin时操作
     * @param req
     */
    void cancelReturns(UserOperateReturnRequestVo req);


    /**
     * 客服关闭退货单,可以操作除finished以外状态的退货申请
     * @param req
     */
    void closeReturns(OmsReturnOperationRequest req);


    /**
     * 退货申请
     * @param applyforReturnVo
     */
    void applyforReturns(ApplyforReturnVo applyforReturnVo);

}
